package per.dg.sqlite.original;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.List;

import per.dg.sqlite.Constant;
import per.dg.sqlite.room.AppDatabase;
import per.dg.sqlite.room.entity.User;

public class SqliteManager {

    public static SqliteManager Instance;

    private SqliteManager(Context mContext){
//        获取 ApplicationContext 防止内存泄露
        this.mContext = mContext.getApplicationContext();
    }

    public static SqliteManager getInstance(Context mContext){
//        双重验空
//        外层是为了方便进入线程锁，如果不为空，直接使用，如果为空，再进入线程锁，减少操作
//        内层是为了防止为空的情况下，有两个及以上线程同时访问了该方法，同时满足外层为空的判断，前一个释放线程锁后，当前线程获取线程会再次创建实例
        if(Instance == null){
            synchronized (SqliteManager.class){
                if(Instance == null){
                    Instance = new SqliteManager(mContext);
                }
            }
        }
        return Instance;
    }

    private Context mContext;

    private int version = 1;

    private SQLiteDatabase getSqLiteDatabse(){
        MySQLiteOpenHelper mySQLiteOpenHelper = new MySQLiteOpenHelper(mContext, Constant.SQLITE_NAME, null, version);
        return mySQLiteOpenHelper.getWritableDatabase();
    }

    /**
     * 返回值插入成功后，数据所在的行数
     * 如果失败，返回-1
     * @param name
     * @return
     */
    public long insert(String name){
//        ContentValues values = new ContentValues();
//        values.put("name", name);
//        return getSqLiteDatabse().insert(Constant.TABLE_NAME, null, values);
        AppDatabase.getInstance(mContext).userDao().insertUser(new User(name));
        return 0;
    }

//    public long insert2(String name){
//        ContentValues values = new ContentValues();
//        values.put("name", name);
//        return getSqLiteDatabse().insert(Constant.TABLE_NAME, null, values);
//        getSqLiteDatabse().rawQuery()
//    }

    public String query(){
//        Cursor cursor = getSqLiteDatabse().query(Constant.TABLE_NAME, new String[]{"name"}, null, null, null, null, null);
//        Cursor cursor = getSqLiteDatabse().query(Constant.TABLE_NAME, null, null, null, null, null, null);
        StringBuffer stringBuffer = new StringBuffer();
//        while (cursor.moveToNext()){
//            String name = cursor.getString(cursor.getColumnIndex("name"));
//            if(name != null || !"".equals(name)){
//                stringBuffer.append(name);
//                if(!cursor.isLast())
//                stringBuffer.append("\n");
//            }
//        }
//        cursor.close();
//        return stringBuffer.toString();
        List<User> allUser = AppDatabase.getInstance(mContext).userDao().getAllUser();
        if(allUser != null){
            for(User user : allUser){
                stringBuffer.append(user.getName());
            }
        }
        return stringBuffer.toString();
    }

    /**
     * 返回删除一共影响的数据数量
     * 没有成功，返回0
     * @param names
     * @return
     */
    public int delete(String[] names){
        return getSqLiteDatabse().delete(Constant.TABLE_NAME, String.format("%s = ?", Constant.TABLE_VALUE_NAME), names);
    }

    /**
     * 返回修改一共影响的数据数量
     * 没有成功，返回0
     * @param nameNow
     * @param nameOld
     * @return
     */
    public int  update(String nameNow, String nameOld){
        ContentValues contentValues = new ContentValues();
        contentValues.put(Constant.TABLE_VALUE_NAME, nameNow);
        return getSqLiteDatabse().update(Constant.TABLE_NAME, contentValues, String.format("%s = ?", Constant.TABLE_VALUE_NAME), new String[]{nameOld});
    }

}
